package com.urbane.auth.dto;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;

/**
 * 刷新 Token 请求数据传输对象（DTO）
 * 功能：
 *   - 用户携带旧 Token 请求生成新 Token
 *   - 用于实现“无感续期”体验（如 App 在后台自动刷新）
 *
 * 使用场景：
 *   - 用户打开 App，Token 即将过期（剩余 < 5min）
 *   - 前端调用 /auth/refresh-token，传入当前 token
 *   - 服务端验证旧 token 有效 → 生成新 token → 返回
 *   - 前端替换本地 token，无需重新登录
 *
 * 安全要求：
 *   - 旧 token 必须未过期、未被吊销
 *   - 每次刷新后，旧 token 必须加入黑名单
 *   - 限制刷新频率（如每小时最多刷新 5 次）
 *
 * 校验规则：
 *   - token: 非空，长度 > 100（JWT 通常 > 300 字符）
 */
@Data
public class RefreshTokenRequest {

    @NotBlank(message = "刷新令牌不能为空")
    @Size(min = 100, message = "令牌格式无效，长度不足")
    private String token;

    // ==================== 构造函数 ====================

    public RefreshTokenRequest() {}

    public RefreshTokenRequest(String token) {
        this.token = token;
    }

    // ==================== 示例 JSON 请求 ====================
    // {
    //   "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
    // }
}